﻿using System.Collections.Generic;
using XNAFight.Engine;

namespace XNAFight.Characters.Core
{
    /// Représente un coup avec tous ses hits (voir classe Hit ... to do)
    public class Coup
    {
        #region CHAMPS

        private string name;
        private string anime_name;  // il va bien falloir appeler la texture correspondante
        private int priorite;
        private bool air;
        private bool stand;
        private bool crouch;
        private List<Hit> hits;
        private int indexHitEnCours;
        
        // Il faudra qu'on puisse définir le script d'un coup : si le premier hit wiffe, s'il touche, s'il tape sur garde, etc...

        // Note : Une image qui represente chaque mouvement de base pourrait etre necessaire si on veut afficher la decomposition du mouvement à l'ecran

        #endregion

        #region PRIOPRIETES

        public string Name
        {
            get { return name; }
        }
        public bool Air
        {
            get { return air; }
        }
        public bool Stand
        {
            get { return stand; }
        }
        public bool Crouch
        {
            get { return crouch; }
        }
        public int Priorite
        {
            get { return priorite; }
        }
        public List<Hit> Hits
        {
            get { return hits; }
        }
        public string Anime_name
        {
            get { return anime_name; }
        }

        #endregion

        #region INITIALISATION

        public Coup(string _name, int _priorité, bool _crouch, bool _air, bool _stand, string _nom_anime = "")
        {
            name = _name;
            priorite = _priorité;
            air = _air;
            stand = _stand;
            crouch = _crouch;
            hits = new List<Hit>();
            indexHitEnCours = 0;

            anime_name = _nom_anime;
        }

        #endregion

        #region UPDATE
        // return true quand le dernier hit du coup est terminé
        public bool update()
        {
            if (Hits[indexHitEnCours].update())
                indexHitEnCours++;

            if (indexHitEnCours >= Hits.Count)
            {
                indexHitEnCours = 0;
                return true;
            }

            return false;
        }

        public PositionVerticale getPositionverticale()
        {
            return Hits[indexHitEnCours].getPositionVerticale();
        }

        #endregion
    }
}
